﻿
/**
* 命名空间: Assets.Scripts.LQBehavior.Nodes.Base
*
* 功 能：顺序节点 
*       该节点会从左到右的依次执行其子节点，只要子节点返回“成功”，就继续执行后面的节点，
*       直到有一个节点返回“运行中”或“失败”时，会停止后续节点的运行，（注意返回运行中需要记录当前节点，下次从当前记录节点开始遍历）
*       并且向父节点返回“运行中”或“失败”，
*       如果所有子节点都返回“成功”则向父节点返回“成功”。
* 类 名： NodeSequence
*
* Ver 变更日期 负责人 变更内容
* ───────────────────────────────────
* V0.01 2019/12/11 15:28:59  
*/




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Game.TDBehaviorTree
{

   [System.Serializable]
    /// <summary>
    /// 顺序节点 (组合节点)
    /// </summary>
    public class NodeSequence : NodeCombine
    {
        private NodeBase m_LastNode;

      

        public NodeSequence() : base(NodeType.Sequence)
        {

        }

        public override NodeResultType Execute()
        {
            int index = 0;
            if (m_LastNode != null)
            {
                index = m_LastNode.NodeIndex;
            }
            m_LastNode = null;
            
            NodeResultType resultType = NodeResultType.Fail;

            for (int i = index; i < m_childNodes.Count; i++)
            {
               
                NodeBase _node = m_childNodes[i];
                resultType= _node.Execute();
                if (resultType == NodeResultType.Fail)
                    break;
                if (resultType == NodeResultType.Success)
                {
                    continue;
                }
                if (resultType == NodeResultType.Running)
                {
                    m_LastNode = _node;
                    break;
                }
            }
            return resultType;
        }
    }
}
